//user 用户模块下的store

//读取或写入操作的一个库
import Storage from '../../utils/storage'

//用户信息本地存储时的名字
const STORAGE_USER_INFO_KEY = 'user';

//其实考虑到已经登录过的情况，应该先读取本地的登录记录数据

let info = Storage.get(STORAGE_USER_INFO_KEY);
// console.log('获取的用户数据：',info);

//判断是否能获取到本地存储的数据
const defaultInfo = {//默认的账号信息模板
   access_token: "",
   account: "",
   add_ip: "",
   add_time: "",
   avatar: "",
   last_ip: "",
   last_time: "",
   nickname: "",
   phone: "",
   role: "",
   status: null,
   uid: null,
   user_role: null,
   token_exp:null,
   token_gen:null
};

//合并默认信息和读取的本地仓库数据
info = Object.assign({},defaultInfo,info);

const state = {
   info
}

const getters = {
   getUserInfo(state) {
      return state.info;
   }
}

const mutations = {
   saveUserInfo(state, payload) {
      state.info = payload;
   },
   clearUserInfo(state){//退出，清空用户数据
      state.info = Object.assign({},defaultInfo);
   }
}

const actions = {
   login(context, payload) {//保存用户信息
      //为了提供外部的异步操作 ，可以使用Promise
      return new Promise((resolve, reject) => {
         //1.存储到本地存储 - > 持久化存储（localStorage , sessionStorage , cookie）
         Storage.save(STORAGE_USER_INFO_KEY, payload);
         //2.更新到store仓库
         context.commit('saveUserInfo', payload);
         resolve();
      })
   },
   logout(context){//退出登录时清空用户信息
      return new Promise((resolve,reject)=>{
         //1.清除本地存储
         Storage.remove(STORAGE_USER_INFO_KEY);

         // 2.清除vuex仓库的内容
         context.commit('clearUserInfo');
         resolve();
      })
   }
}

export default {
   namespaced: true,//开启模块的命名空间
   state,
   getters,
   mutations,
   actions
}
